package com.example.service.impl;

import com.example.entity.Product;
import com.example.entity.Result;
import com.example.mapper.ProductMapper;
import com.example.page.Page;
import com.example.service.ProductService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import org.springframework.util.ResourceUtils;

import java.io.File;
import java.io.FileNotFoundException;
import java.util.List;

/**
 * @Author:tjf
 * @Description:
 */
@Service
public class ProductServiceImpl implements ProductService {
    @Autowired
    private ProductMapper productMapper;

    /**
     * 根据商品编号，查找商品的业务方法
     * @param productNum
     * @return
     */
    @Override
    public Product queryProductByProductNum(String productNum) {
        return productMapper.selectProductByProductNum(productNum);
    }

    /**
     * 修改商品状态的业务方法
     *
     * @param product
     * @return
     */
    @Override
    public Result modifyProductStateById(Product product) {
        // 修改商品的上下架状态
        if (productMapper.updateProductStateById(product) <= 0) { // 出现系统问题
            return Result.err(Result.CODE_ERR_SYS, "系统忙，请稍后重试！");
        }
        return Result.ok("1".equals(product.getUpDownState()) ? "商品上架成功！" : "商品下架成功！");
    }

    /**
     * 根据商品id删除商品的业务方法
     * @param id
     * @return
     */
    @Override
    public Result removeProductById(Integer id) {
        try {
            // 根据id，查询商品
            Product product = productMapper.selectProductById(id);
            if (product == null){ // 查不到该商品
                return Result.err(Result.CODE_ERR_SYS, "系统忙，请稍后重试！");
            }

            // 删除商品的图片
            // 获取类路径下的static目录的绝对路径
            File saveFileDir = ResourceUtils.getFile("classpath:static");
            String absolutePath = saveFileDir.getAbsolutePath(); // static目录的绝对路径

            // 图片的绝对路径
            String fileName = absolutePath + product.getImgs();

            // 有商品图片就删除，没有就不用处理
            new File(fileName).delete();
            // 删除商品，并判断删除是否成功
            if (productMapper.deleteProductById(id) <= 0) {
                return Result.err(Result.CODE_ERR_SYS, "系统忙，请稍后重试！");
            }
            return Result.ok("商品删除成功！");
        } catch (FileNotFoundException e) {
            e.printStackTrace();
            return Result.err(Result.CODE_ERR_SYS, "系统忙，请稍后重试！");
        }
    }

    /**
     * 根据商品id修改商品信息的业务方法
     * @param product
     * @return
     */
    @Override
    public Result updateProductById(Product product) {
        // 对商品的信息进行修改
        if (productMapper.updateProductById(product) <= 0) {
            return Result.err(Result.CODE_ERR_SYS, "系统忙，请稍后重试！");
        }
        return Result.ok("商品信息修改成功！");
    }

    /**
     * 根据条件查询商品并分页的业务方法
     * @param page
     * @param product
     */
    @Override
    public void queryProductByConditionForPagination(Page page, Product product) {
        // 根据条件查询总的商品记录条数
        int productCount = productMapper.selectProductCountByConditionForPagination(product);

        // 根据条件查询所有的商品
        List<Product> productList = productMapper.selectProductByConditionForPagination(product, page);

        // 封装参数page
        page.setTotalNum(productCount);
        page.setResultList(productList);
    }

    /**
     * 保存添加的商品的业务方法
     * @param product
     * @return
     */
    @Override
    public Result saveProduct(Product product) {
        if (productMapper.insertProduct(product) <= 0) {
            return Result.err(Result.CODE_ERR_SYS, "系统忙，请稍后重试！");
        }
        return Result.ok("添加商品成功！");
    }
}
